package progress.exa31_3;

import javax.swing.*;

/**
 * 个人感觉这种方式虽然简洁，但是其可读性对新人并不友好
 * 所以不推荐使用
 */
public class MethodReferenceStudy {
    public static void main(String[] args) {
        methodReference();
    }

    /**
     * 这里的：(event)->System.out.println(event) 等价于
     * System.out::println
     */
    public static void methodReference(){
        Timer t = new Timer(1000, (event)->System.out.println(event));
        t.start();
        //这里我们看到了：：的使用
        //等价于上面的语句,只不过是隐藏了参数
        Timer t1 = new Timer(1000,System.out::println);
        t1.start();

        JOptionPane.showMessageDialog(null,"要退出吗?");
        System.exit(0);
    }

    /**
     * object::instanceMethod
     * 方法的引用等价于提供方法的参数的lambda表达式
     * 例如：System.out::println等价于x->System.out.println(x)
     */
    public static void referenceTest1(){

    }

    /**
     * Class::staticMethod
     * 调用类的静态方法，方法的引用等价于提供方法参数的lambda表达式
     * 例如：Math::pow等价于(x,y)->Math.pow(x,y)
     */
    public static void referenceTest2(){

    }

    /**
     * Class::instanceMethod
     * 第一个参数会成为方法的目标
     * String::compareToIgnoreCase等价于(x,y)->x.compareToIgnoreCase(y)
     */
    public static void referenceTest3(){

    }

    /**
     * 例如：Person::new 是 Person构造器的引用。
     */
    public static void constructReference(){

    }



}
